package J18;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class J18_JDBCSetup {

	// JDBC 접속문
	private static final String DRV ="oracle.jdbc.OracleDriver";
	private static final String URL ="jdbc:oracle:thin:@127.0.0.1/xe";
	private static final String USR ="scott";
	private static final String PWD ="TIGER";
	
	//sql 문 작성
	private static final String insertSQL = " INSERT INTO SUNGJUK(SJNO,NAME,KOR,ENG,MAT) VALUES(SJNO.NEXTVAL,'미루',90,15,86)";
	private static final String selectSQL = " SELECT * FROM SUNGJUK ORDER BY SJNO DESC";
	
	
	public static void main(String[] args) {
		//오라클을 이용한 JDBC 프로그래밍 기초
		//1. jdbc 드라이버를 메모리에 적재하여 객체로 생성하고 이것을
		//	 DriverManader에 등록.
		//2. DriverManader 의 getConnection 메서드를 이용해서 데이터베이스 연결객체를 생성함.
		//3. PreparedStatement로 실행할 쿼리문 객체를 생성
//		4. 실행하는 SQL이 insert,update,delete라면 executeUpdate()를 사용하고
//			실행결과는 int로 받음
//			
//		5. 실행하는 쿼리문이 select라면 executeQuery()를 사용하고 실행결과는
//		resultsSet으로 받음
		
		Connection conn = null;//연결 객체 저장용.
		PreparedStatement ps = null;//sql객체
		ResultSet rs = null;//실행결과 저장
		try{
			Class.forName(DRV);
			conn = DriverManager.getConnection(URL, USR, PWD);
			
			ps=conn.prepareStatement(insertSQL);
			int cnt = ps.executeUpdate();
			System.out.println(cnt + "건의 데이터 입력");
			
			ps.close(); //새로운 쿼리 작성을 위해 기존 ps객체 제거.
			
			ps = conn.prepareStatement(selectSQL);
			rs = ps.executeQuery();
			//ResultSet에서 결과를 레코드 단위로 꺼내어 차례대로 출력.
			while(rs.next()){
				System.out.println(rs.getInt(1));
				System.out.println(rs.getString("name"));
			}

		}catch (Exception e){
			e.printStackTrace();
		}finally{
			//jdbc 작업이 끝난 후 메모리에서 객체 제거.
			if(rs != null)
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			if(ps != null)
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			if(conn != null)
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}

}
